// 安装依赖：
// npm i @microj/weixin-js-sdk vant
import wx from "@microj/weixin-js-sdk";
import { showSuccessToast, showFailToast } from "vant";
/**
 * 调用微信扫码接口
 * @param {Object} config 后台签名生成的参数
 * @param {string} config.appId       // 公众号唯一标识
 * @param {number} config.timestamp   // 时间戳
 * @param {string} config.nonceStr    // 随机串
 * @param {string} config.signature   // 签名
 * @param {boolean} [config.needResult=false] // 返回扫码结果，默认 false（直接在微信界面处理）
 * @returns {Promise<string>} 成功时返回扫码结果（如果 needResult=true），失败或取消则抛出错误
 */
export default function weixinScanQRCode(config) {
  return new Promise((resolve, reject) => {
    console.log("weixinScanQRCode",config)
    wx.config({
      debug: false,
      appId: config.appId,
      timestamp: config.timestamp,
      nonceStr: config.nonceStr,
      signature: config.signature,
      jsApiList: ["scanQRCode"],
    });
    wx.ready(() => {
      wx.scanQRCode({
        needResult: config.needResult ? 1 : 0, // 0:微信处理，1:返回结果
        scanType: ["qrCode", "barCode"], // 可以指定扫二维码还是一维码，默认二者都可
        success: (res) => {
          // res.resultStr 微信处理后固定提示框，1 模式下才有返回值
          const result = config.needResult ? res.resultStr : "扫码已发起，请在微信界面查看";
          showSuccessToast({
            message: "扫码成功",
            duration: 1500,
            forbidClick: true,
            onClose: () => resolve(result),
          });
        },
        cancel: () => {
          showFailToast({
            message: "用户取消扫码",
            duration: 1500,
            forbidClick: true,
            onClose: () => reject(new Error("用户取消扫码")),
          });
        },
        fail: (err) => {
          showFailToast({
            message: "扫码失败，请稍后重试",
            duration: 1500,
            forbidClick: true,
            onClose: () => reject(err),
          });
        },
      });
    });
    wx.error((err) => {
      // 配置校验失败（签名过期等）
      showFailToast({
        message: "微信授权失败，请刷新重试",
        duration: 1500,
        forbidClick: true,
        onClose: () => reject(err),
      });
    });
  });
}
